package com.bjpowernode.gateway.common.util;

import cn.hutool.core.lang.tree.Tree;
import cn.hutool.crypto.digest.DigestUtil;

import java.util.Map;
import java.util.TreeMap;

public class SignUtil {
    //生成签名

    //验证签名
    //把接收到的请求参数,去掉sign后,重新计算生成签名值,和请求中的sign比较,如果一致,签名正确
    public static boolean checkSign(Map<String,String> params,String appSecret,String sign){
        //接收的参数,重新计算得到签名
        String newSign = createSign(params,appSecret);
        return newSign.equals(sign);
    }

    public static String createSign(Map<String, String> params, String appSecret) {
        //1.sign参数不参与签名
        params.remove("sign");
        //2.把参数字典排序a在b的前面
        TreeMap<String,String> treeMap = new TreeMap<>(params);
        StringBuilder builder = new StringBuilder();
        treeMap.forEach((key, value) ->{
            builder.append(key).append("=").append(value).append("&");
        });
        //最后加入&appSecret=分配的密钥
        builder.append("&appSecret=").append(appSecret);
        //3.md5得到签名
        return DigestUtil.md5Hex(builder.toString());
    }
}
